package br.com.conciliador.upload.negocio;

import java.util.HashMap;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.Session;

import br.com.conciliador.upload.vo.DetalheArquivoRemessaVendasVo;
import br.com.conciliador.util.hibernate.business.R2HbNgc;
import br.com.r2.util.hibernate.business.RestritorHb;

public class DetalheArquivoRemessaVendasNgc extends R2HbNgc<DetalheArquivoRemessaVendasVo>
{

   private Map filtroPropriedade = new HashMap();

   private Map restritores = new HashMap();

   public static final int JOIN_HEADER = 1;

   public static final int JOIN_DATAVENDA = 2;

   public static final int JOIN_BANDEIRA = 4;

   public static final int JOIN_PRODUTO = 8;

   public static final int JOIN_LOJA = 16;
   
   public static final int JOIN_EST_EMPRESA = 32;

   private static DetalheArquivoRemessaVendasNgc instancia = null;

   private DetalheArquivoRemessaVendasNgc()
   {
      init(restritores, filtroPropriedade, DetalheArquivoRemessaVendasVo.class);
      addFiltro("header.codigo", RestritorHb.RESTRITOR_EQ, "headerVo.codigo");
      addFiltro("dataVenda.data", RestritorHb.RESTRITOR_EQ, "dataVendaVo.data");
      addFiltro("bandeira.codigo", RestritorHb.RESTRITOR_EQ, "bandeiraVo.codigo");
      addFiltro("loja.codigo", RestritorHb.RESTRITOR_EQ, "lojaVo.codigo");
      //addFiltro("estEmpresa", RestritorHb.RESTRITOR_EQ, "estEmpresa");
   }

   public static DetalheArquivoRemessaVendasNgc getInstancia()
   {
      if (instancia == null)
      {
         instancia = new DetalheArquivoRemessaVendasNgc();
      }
      return instancia;
   }

   @Override
   protected Map filtroPropriedade()
   {
      return filtroPropriedade;
   }

   @Override
   protected Map restritores()
   {
      return restritores;
   }

   @Override
   protected Criteria montaCriteria(Session sessao, int join)
   {
      Criteria criteria = sessao.createCriteria(DetalheArquivoRemessaVendasVo.class);
      if ((join & JOIN_HEADER) != 0)
      {
         criteria.createCriteria("headerVo", "header", Criteria.INNER_JOIN);
      }
      
      if ((join & JOIN_BANDEIRA) != 0)
      {
         criteria.createCriteria("bandeiraVo", "bandeira", Criteria.INNER_JOIN);
         if ((join & JOIN_PRODUTO) != 0)
         {
            criteria.createCriteria("produtoVo", "produto", Criteria.INNER_JOIN);
         }
      }
      
      if ((join & JOIN_LOJA) != 0)
      {
         criteria.createCriteria("lojaVo", "loja", Criteria.INNER_JOIN);
         
      }
      
      if ((join & JOIN_DATAVENDA) != 0)
      {
         criteria.createCriteria("dataVendaVo", "dataVenda", Criteria.INNER_JOIN);
      }

      return criteria;
   }

}
